'use strict';
module.exports = {
  /**
   * 此函数名称
   * @url user/pub/test1 前端调用的url参数地址
   * @description 此函数描述
   * @param {Object} data 请求参数
   * @param {String} uniIdToken 用户token
   * @param {String} userInfo 当前登录用户信息（可信任，仅kh目录下的函数有此值）
   * pub目录下请求参数需要带上 need_user_info = true
   * @param {Object} util 公共工具包
   * @param {Object} filterResponse 过滤器返回的数据
   * @param {Object} originalParam 原始请求参数（包含了原始event和context）
   * data 请求参数 说明
   * @param {String} uid 当前登录用户id（可信任，仅kh目录下的函数有此值）
   * res 返回参数说明
   * @param {Number} code 错误码，0表示成功
   * @param {String} msg 详细信息
   */
  main: async (event) => {
    //  注意: userInfo 和 uid 是可信任的，但默认只有kh目录下的函数才有此值
    let {
      data = {}, userInfo, util, filterResponse, originalParam
    } = event;
    let {
      customUtil,
      uniID,
      config,
      pubFun,
      vk,
      db,
      _
    } = util;
    let {
      uid
    } = data;
    let res = {
      code: 0,
      msg: ""
    };
    
    let contractName = 'vk-contract'
    let userName = "uni-id-users"
    let msgName = "vk-message"
    let bonusRelateName = "vk-bonus-relate";
    // 业务逻辑开始----------------------------------------------------------- 
    // 可写与数据库的交互逻辑等等
    const dbCmd = db.command
    let pageSize = 100
    let pageNum = 1
    
    // 判断一下是不是19号
    let dateObj = vk.pubfn.getDateInfo(new Date());
    if (dateObj.day !== 19) {
      return {
		  code: 200,
		  msg: 'date error'
	  }
    }
    res.dateObj = dateObj
    
    // 获取所有用户
    // 筛选出加油VIP

    
    
    let userArr
    let obj = await vk.baseDao.select({
      dbName: userName,
      pageKey: true,
      getCount: true,
      pageIndex: pageNum,
      pageSize: pageSize,
      whereJson: {},
    }, util);
    if (obj.total > pageSize) {
      let count = obj.total / pageSize + 1
      let arr = []
      for (let i = 0; i < count; i++) {
        let info = await vk.baseDao.select({
          dbName: userName,
          pageKey: true,
          getCount: true,
          pageIndex: i + 1,
          pageSize: pageSize,
          whereJson: { },
        }, util);
        arr = arr.concat(info.rows)
      }
      userArr = [].concat(arr)
    } else {
      userArr = [].concat(obj.rows)
    }
    let arr_2 = []
    for (let k = 0; k < userArr.length;k++) {
      let k_item = userArr[k]
      // 待释放大于0
      if (k_item.gas_amount_back && k_item.gas_amount_back > 0) {
        arr_2.push(k_item)
      }
    }
    res.userArr = arr_2
    console.log(arr_2, 'usergas-----')
    
    // 判断当月是否出账过
    
    
    let { monthStart, monthEnd } = vk.pubfn.getCommonTime(new Date(), 8);
    let msgArr
    let whereJson = {
      type: 6,
      flag: 1,
      '_add_time': dbCmd.gte(monthStart).and(dbCmd.lte(monthEnd))
    }
    let obj3 = await vk.baseDao.select({
      dbName: msgName,
      pageKey: true,
      getCount: true,
      pageIndex: pageNum,
      pageSize: pageSize,
      whereJson
    }, util);
    if (obj3.total > pageSize) {
      let count = obj3.total / pageSize + 1
      let arr = []
      for (let i = 0; i < count; i++) {
        let info = await vk.baseDao.select({
          dbName: msgName,
          pageKey: true,
          getCount: true,
          pageIndex: i + 1,
          pageSize: pageSize,
          whereJson
        }, util);
        arr = arr.concat(info.rows)
      }
      msgArr = [].concat(arr)
    } else {
      msgArr = [].concat(obj3.rows)
    }
    // 获取当月的加油释放记录
    res.msgArr = msgArr
    console.log(msgArr, 'msgArr-----')
    
    // 出账过就不管了，没有出账就出账一次
    let arr_todo = []
    
    
    // arr_2 和 msgArr 做一个构造
    for (let m = 0; m < arr_2.length; m++) {
      let mItem = arr_2[m]
      let flag = false
      for (let n = 0; n < msgArr.length; n++) {
        let nItem = msgArr[n]
        if (mItem._id == nItem.user_id) {
          flag = true
          break
        }
      }
      if (!flag) {
        arr_todo.push(mItem)
      }
    }
    res.arr_todo = arr_todo
    console.log(arr_todo, 'arr_todo----')
   for (let u = 0; u < arr_todo.length; u++) {
     let uItem = arr_todo[u]
     let gap = parseFloat(uItem.gas_amount / 24)
     await vk.baseDao.update({
       dbName: userName,
       whereJson: {
         _id: uItem._id
       },
       dataJson: {
        gas_amount_back: uItem.gas_amount_back - gap,
        gas_amount_remind: uItem.gas_amount_remind + gap
       }
     }, event.util);
     
      await vk.baseDao.add({
        dbName: msgName,
        dataJson: {
          flag: 1, // 专用于油气查询
          user_id: uItem._id,
          nickname: uItem.nickname,
          status: 1,
          amount: gap,
          msg: '加油卡发放',
          type: 6 // 返利积分发放  2 系统消息  3 提现审核消息  4订单审核信息  5 推荐积分发放
        }
      }, event.util);
   }
    res.monthStart = monthStart
    res.monthEnd = monthEnd
    
    // 业务逻辑结束-----------------------------------------------------------
    return res;
  }
}